home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / gcctest / tests05.zoo / tbcopy.c < prev    next >
C/C++ Source or Header  |  1993-03-02  |  3KB  |  134 lines

  1. #include <stdio.h>
  2.  
  3. extern void bcopy(void *src, void *dst, unsigned long cnt);
  4.  
  5. #define LEN 40  /* keep this below 255 */
  6.  
  7. void
  8. shake (unsigned char *arry)
  9. {
  10.     int i;
  11.  
  12.     /* copy down - even aligned */
  13.     bcopy (&arry[2], &arry[0], LEN - 2);
  14.     printf("down - even-even\n");
  15.     for (i = 0; i < 16; i++)
  16.     printf("%3d ", arry[i]);
  17.     printf("\n");
  18.  
  19.     /* copy up - even aligned */
  20.     printf("up - even-even\n");
  21.     bcopy (&arry[0], &arry[4], LEN - 4);
  22.     for (i = 0; i < 16; i++)
  23.     printf("%3d ", arry[i]);
  24.     printf("\n");
  25.  
  26.     /* copy down - odd-even aligned */
  27.     printf("down - even-odd\n");
  28.     bcopy (&arry[8], &arry[1], LEN - 8);
  29.     for (i = 0; i < 16; i++)
  30.     printf("%3d ", arry[i]);
  31.     printf("\n");
  32.     
  33.     /* copy up - odd-even aligned */
  34.     printf("up - even-odd\n");
  35.     bcopy (&arry[0], &arry[1], LEN - 1);
  36.     for (i = 0; i < 16; i++)
  37.     printf("%3d ", arry[i]);
  38.     printf("\n");
  39.     
  40.     /* copy down - odd-odd aligned */
  41.     printf("down - odd-odd\n");
  42.     bcopy (&arry[7], &arry[1], LEN - 7);
  43.     for (i = 0; i < 16; i++)
  44.     printf("%3d ", arry[i]);
  45.     printf("\n");
  46.     
  47.     /* copy up - odd-odd aligned */
  48.     printf("up - odd-odd\n");
  49.     bcopy (&arry[1], &arry[3], LEN - 3);
  50.     for (i = 0; i < 16; i++)
  51.     printf("%3d ", arry[i]);
  52.     printf("\n");
  53. }
  54.  
  55.  
  56. unsigned char bigo[0x20000];
  57. unsigned char ahull[LEN + 4];
  58. unsigned char bhull[LEN + 4];
  59.  
  60. int
  61. main(int argc, char **argv)
  62. {
  63.  
  64.     long i;
  65.     int  k;
  66.     unsigned char *arry, *brry;
  67.  
  68.     for (i = 0; i < 0x20000; i++) {
  69.     bigo[i] = i & 0xff;
  70.     }
  71.     /* shift bigo four positions up leaving the last */
  72.     bcopy(&bigo[0], &bigo[4], (0x20000 - 5));
  73.  
  74.     for (i = 4 + 254 ; i < 0x20000 - 5; i += 0x100) {
  75.     if (bigo[i] != 254 || bigo[i + 1] != 255) {
  76.         fprintf(stderr, "discrepancy on position %ld - got %u %u\n",
  77.             i, bigo[i], bigo[i + 1]);
  78.     }
  79.     }
  80.     printf("the last one is %u\n", bigo[0x20000 - 1]);
  81.     
  82.  
  83.     ahull[0] = ahull[1] = ahull[LEN + 2] = ahull[LEN + 3] = 0xff;
  84.     bhull[0] = bhull[1] = bhull[LEN + 2] = bhull[LEN + 3] = 0xff;
  85.     arry = &ahull[2];
  86.     brry = &bhull[2];
  87.     
  88.     for (i = 0; i < LEN; i++) {
  89.     arry[i] = i & 0xff;
  90.     }
  91.  
  92.     /* test copying between disjoint regions */
  93.  
  94.     bcopy(&arry[0], &brry[0], LEN);
  95.     for (i = 0; i < 16; i++)
  96.     printf("%3d ", brry[i]);
  97.     printf("\n");
  98.  
  99.     bcopy(&arry[1], &brry[1], LEN - 1);
  100.     for (i = 0; i < 16; i++)
  101.     printf("%3d ", brry[i]);
  102.     printf("\n");
  103.  
  104.     bcopy(&arry[2], &brry[2], LEN - 2);
  105.     for (i = 0; i < 16; i++)
  106.     printf("%3d ", brry[i]);
  107.     printf("\n");
  108.  
  109.     bcopy(&arry[3], &brry[3], LEN - 3);
  110.     for (i = 0; i < 16; i++)
  111.     printf("%3d ", brry[i]);
  112.     printf("\n");
  113.  
  114.     for (k = 4; k < LEN; k++)
  115.     bcopy(&arry[k], &brry[k], LEN - k);
  116.     for (i = LEN-16 ; i < LEN; i++)
  117.     printf("%3d ", brry[i]);
  118.     printf("\n");
  119.     for (i = 0; i < 16; i++)
  120.     printf("%3d ", brry[i]);
  121.     printf("\n");
  122.  
  123.     printf("*** %3d %3d %3d %3d ***\n",
  124.        ahull[0], ahull[1], ahull[LEN + 2], ahull[LEN + 3]);
  125.  
  126.     /* and now with an overlap */
  127.  
  128.     shake(&arry[0]);
  129.  
  130.     printf("*** %3d %3d %3d %3d ***\n",
  131.        ahull[0], ahull[1], ahull[LEN + 2], ahull[LEN + 3]);
  132.     return 0;
  133. }
  134.